RE
dúvida

Alavanca Erro.

Por Redes, 06 de ago. de 2012 em Scripts

alavanca
porta
passagem
otserv
tibia
script
24
3.6k
RedesR
06 de agosto de 2012 às 19:32

Olá galera do Xtibia.

 

Recentemente vi um script para criar uma 'porta' que quando você puxasse certa alavanca ela era liberada, e logo em seguida ela voltava ao normal, para o próximo.

 

 

imagem1vt.th.png

 

 

imagem2uha.th.png

 

Script exatamente deste tópico.

 

http://www.xtibia.co...89348-alavanca/

 

____________________________________________

Utilizei o script disponibilizado pelo colega Leoxtibia.

 

pedra = {x=1,y=1,z=1, stackpos = 1} --- a posição da pedra // nao mexa no stackpos

idpedra = 1111 -- coloque o id da pedra

time = 20 -- tempo em segundos para a pedra aparecer

function onUse(cid, item, fromPosition, itemEx, toPosition)

doRemoveItem(getThingfromPos(pedra).uid, 1)

doPlayerSendTextMessage(cid, 18, "Você tem ".. time .." segundos para passar antes que a pedra volte!")

addEvent(createPedra, time*1000)

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

return true

end

 

function createPedra(pos)

pos = {x=1,y=1,z=1,stackpos=1} --- posicao da pedra

idpedra = 1111 --- id da pedra

doCreateItem(idpedra, 1, pos)

end

 

 

_________________________

 

Ele funciona como o determinado, entretanto quando eu clico mais de um vez na alavanca, antes que a 'porta' volte, gera uma mensagem de erro:

 

[6/8/2012 18:59:54] [Error - Action Interface]

[6/8/2012 18:59:54] data/actions/scripts/Sacrificio Tomb.lua:onUse

[6/8/2012 18:59:54] Description:

[6/8/2012 18:59:54] (luaDoRemoveItem) Item not found

 

 

E então, por mais que eu puxe a alavanca, a 'porta' não abre mais.

 

 

imagem3ay.th.png

 

__________________________

 

Gostaria de saber como faço para a alavanca travar, enquanto a 'porta' está livre.

 

Obrigado

Redes

NewtonnotwenN
06 de agosto de 2012 às 19:44

Actions.xml:

<action actionid="7779" script="removewall.lua"/>

data/actions/scripts crie um arquivo chamado removewall.lua e adicione:

function onUse(cid, item, fromPosition, itemEx, toPosition)

function Wall()

local x = true

local B = {

{1056,{x=1041, y=1051, z=15, stackpos = 1}}, -- id da parede e pos da parede

{1056,{x=1041, y=1052, z=15, stackpos = 1}},

{1056,{x=1041, y=1053, z=15, stackpos = 1}},

{1056,{x=1041, y=1054, z=15, stackpos = 1}}

}

for i = 1, #B do

if getTileItemById(B[2], B[1]).uid == 0 then x = false end

if x == true then

doRemoveItem(getThingfromPos(B[2]).uid,1)

else

doCreateItem(B[1], 1, B[2])

end

end

end

Wall()

addEvent(Wall, 5000)

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

return true

end

-Vermelho: Unica variável

 

Obs: Adicione e remova de acorda com o numero de paredes.

{1056,{x=1041, y=1053, z=15, stackpos = 1}},

 

-----------------------

Editando no RME:

action25.png

Editado Agosto 6 por Newtonnotwen

RedesR
06 de agosto de 2012 às 19:59

Newtonnotwen

 

Fiz o que voce sugeriu, mas não deu certo.

 

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

function Wall()

local x = true

local B = {

{12902,{x=1511, y=559, z=8, stackpos = 1}}, -- id da parede e pos da parede

}

for i = 1, #B do

if getTileItemById(B[2], B[1]).uid == 0 then x = false end

if x == true then

doRemoveItem(getThingfromPos(B[2]).uid,1)

else

doCreateItem(B[1], 1, B[2])

end

end

end

Wall()

addEvent(Wall, 5000)

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

return true

end

 

Utilizei o seu script, mas não deu resultado.

 

Mesmo assim obrigado.

NewtonnotwenN
06 de agosto de 2012 às 20:00

Qual a versão de seu ot server?

RedesR
06 de agosto de 2012 às 20:03

Versão 9.44.

 

Utilizo, também, o remeres 3.0 beta... não sei se isso influencia.

NewtonnotwenN
06 de agosto de 2012 às 20:06

Acho que pode ser o seguinte erro:

 

O script está com alavanca de ID 1945 e 1946.

 

Pode me dizer o ID da alavanca que você usa?

Editado Agosto 6 por Newtonnotwen

RedesR
06 de agosto de 2012 às 20:09

Sim, eu uso a 1945 e a 1946.

NewtonnotwenN
06 de agosto de 2012 às 20:12

Da algum erro no distro?

RedesR
06 de agosto de 2012 às 20:15

Simplesmente não acontece nada, como se fosse apenas uma alavanca colocada no mapa sem qualquer action.

 

Grato.

EskyloE
06 de agosto de 2012 às 20:22
pedra = {x=1,y=1,z=1, stackpos = 1} --- a posição da pedra // nao mexa no stackpos
idpedra = 1111 -- coloque o id da pedra
time = 20 -- tempo em segundos para a pedra aparecer

local storage = 5931
local time_now = os.time()

function onUse(cid, item, fromPosition, itemEx, toPosition)
if getGlobalStorageValue(storage) - time_now >= 0 then
  doPlayerSendTextMessage(cid, 18, "A passagem já está liberada!")
else
  doRemoveItem(getThingfromPos(pedra).uid, 1)
  doPlayerSendTextMessage(cid, 18, "Você tem ".. time .." segundos para passar antes que a pedra volte!")
  addEvent(createPedra, time*1000)
  doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
  setGlobalStorageValue(storage, time_now+time)
end
return true
end
function createPedra(pos)
pos = {x=1,y=1,z=1,stackpos=1} --- posicao da pedra
idpedra = 1111 --- id da pedra
doCreateItem(idpedra, 1, pos)
end

NewtonnotwenN
06 de agosto de 2012 às 20:24

Então ela não esta ligada a nenhum script.

 

Você adicionou como o arquivo xml?

LuckOakeL
06 de agosto de 2012 às 20:25

@Redes

 

Você por acaso alterou as coordenadas da parede no script?

RedesR
06 de agosto de 2012 às 20:29

Eskylo e Newtonnotwen, obrigado pela paciência.

 

Infelizmente só poderei testar amanha, agora preciso sair.

 

Mas uma vez obrigado.

EskyloE
06 de agosto de 2012 às 20:30

OK. Testei aqui, e pegou

NewtonnotwenN
06 de agosto de 2012 às 20:32

Amanhã você me fala como ficou seu arquivo xml.

 

Flws!